// 这个文件用于定义当前reducer模块的 state数据 和 action执行操作

const store = {
  // 存放数据
  state: {
    sarr: [10, 20, 30]
  },

  // 存放同步的操作方法
  actions: {
    // 下面是定义一个函数，newState 和 action 是要传递的两个参数，这两个参数后面的花括号中的内容是ts数据类型
    sarrpush(newState: { sarr: number[] }, action: { type: string, val: number }) {
      newState.sarr.push(action.val)
    }
  },

  // 存放操作类型名称
  // 实现actionNames自动生成，不需要每次添加一个actions操作方法，就要写一个对应的操作类型名称
  actionNames: {}
}
const actionNames = {}
// 遍历仓库中的操作方法
for (const key in store.actions) {
  // 这里的 key 获取的是actions中每一个方法的方法名
  actionNames[key] = key  // 向actionNames对象中添加一个属性名和属性值都为当前遍历出的key的属性
}
// 将actionNames赋值给仓库中的actionNames，这一步过后，如果仓库的新添加了操作方法，那么actionNames就会自动生成这个操作方法对应的操作类型名称
store.actionNames = actionNames;


export default store